package DesignPattern.Builder.Singleton;

import java.io.Serializable;

public class TestSingleton implements Serializable {

    // 反射解决：判断是否第一次访问
    private static boolean flag = false;

    private TestSingleton() {
        // 防止多线程问题
        synchronized (TestSingleton.class) {
            if (flag) {
                throw new RuntimeException("不能创建多个对象");
            }
            flag = true;
        }
    }

    //    在本类中创建对象，保证只能创建一个对象
    private static TestSingleton instance = new TestSingleton();

    //    提供公共访问的方式，让外界获取对象，外界无法创建，需用Static修饰
    public static TestSingleton getInstance() {
        return instance;
    }

    // 当进行反序列化时，会自动调用该方法，将该方法返回值直接返回
    public Object readResolve() {
        return instance;
    }
}
